package com.qf.base.utils;

import com.alibaba.fastjson.JSONObject;
import com.qf.base.pojo.UserVO;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
import java.util.Date;
public class JWTUtil {
    static int TOKEN_EXPIRE=1000*60*30;
    static String  TOKEN_KEY="qf";
    public static UserVO checkToken(String token){
        Claims body=null;
        try {
            body= Jwts.parser().setSigningKey(TOKEN_KEY.getBytes()).parseClaimsJws(token).getBody();
//
        }catch (Exception e){
          //  e.printStackTrace();
            return null;
        }

        Object userString=body.get("user");
        UserVO user=JSONObject.parseObject((String) userString, UserVO.class);
        return user;
    }
//    解决访问时间到期续签的问题
    public static String createTokenByOldToken(String oldToken){
        UserVO user = checkToken(oldToken);
        String token=generatorToken(user.getNickname(),user);
        return token;
    }

    private static String generatorToken(String nickname, UserVO user) {
        //JWT的结构
        String token= Jwts.builder()
                //设置用户的昵称
                .setSubject(nickname)
                //设置token时间
                .setIssuedAt(new Date())
                //设置token过期时间
                .setExpiration(new Date(System.currentTimeMillis()+TOKEN_EXPIRE))
                //设置携带的对象
                .claim("user",user)
                //设置加密方式，以及密钥
                .signWith(SignatureAlgorithm.HS256,TOKEN_KEY.getBytes())
                //生成token
                .compact();
        return token;
    }

}
